package com.gsi.webstore.platform.storefront.capi.order;

import java.util.Collection;
import java.util.Date;

import com.intershop.beehive.foundation.quantity.Money;
import com.intershop.component.warranty.capi.WarrantyBO;
import com.intershop.sellside.appbase.b2c.capi.order.Discount;
import com.intershop.sellside.appbase.b2c.capi.order.ProductLineItemBO;

public interface GSIProductLineItemBO extends ProductLineItemBO
{
    public Date getDeliveryToDate();

    public Date getDeliveryFromDate();

    public boolean isHiddenEDD();

    public Collection<Discount> getAppliedItemDiscounts();

    public Collection<GSITaxInformationBO> getAppliedItemDiscountTaxes(final Discount discount);

    public Collection<Discount> getAppliedShippingDiscounts();

    public Collection<GSITaxInformationBO> getAppliedShippingDiscountTaxes(final Discount discount);

    public Collection<GSITaxInformationBO> getItemPriceBasedTaxes();

    public Money getNetDiscountAmount(final Discount discount);

    public Collection<GSITaxInformationBO> getShippingCostBasedTaxes();

    public Money getDutyAmount();

    public Collection<GSITaxInformationBO> getDuties();

    public Collection<GSIExtraChargeInformationBO> getFees();

    public Collection<GSIExtraChargeInformationBO> getGeographicalFees();

    public Collection<GSIExtraChargeInformationBO> getImportFees();

    public GSIWarrantyLineItemBO getWarranty();

    public GSIWarrantyLineItemBO addWarranty(WarrantyBO aWarranty);

    public GSIGiftWrapLineItemBO getGiftWrap();

    public GSIGiftMessageLineItemBO getGiftMessage();

    public Money getNetBasePrice();

    /**
     * Gets the net base price for VAT inclusive (the getPrice() for net based)
     *
     * @return
     */
    public Money getNetShippingCosts();

}